package com.kgc.ssm.controller;

import com.kgc.ssm.bean.Bill;
import com.kgc.ssm.bean.Provider;
import com.kgc.ssm.constant.CommConstant;
import com.kgc.ssm.service.BillService;
import com.kgc.ssm.service.ProviderService;
import com.kgc.ssm.util.PageSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * Created On : 2022/9/14.
 * <p>
 * Author : zhukang
 * <p>
 * Description: 订单操作
 */
@Controller
public class BillController {

    @Autowired
    private ProviderService providerService;

    @Autowired
    private BillService billService;

    /**
     * @author : zhukang
     * @date   : 2022/8/15
     * @param  : [request, response]
     * @return : void
     * @description : 查询订单列表，带分页
     */
    @RequestMapping("/billList")
    public String billList(@RequestParam(required = false) String queryProductName,
                         @RequestParam(required = false) String queryProviderId,
                         @RequestParam(required = false, defaultValue = "0") Integer queryIsPayment,
                         @RequestParam(required = false, defaultValue = CommConstant.DEFAULT_INIT_PAGE_NO) Integer pageNo,
                         @RequestParam(required = false, defaultValue = CommConstant.DEFAULT_INIT_PAGE_SIZE) Integer pageSize,
                        Map<String, Object> map) {


        // 查询所有的供应商列表
        List<Provider> providers = providerService.getAllProvider();

        // 供应商列表
        map.put("providers", providers);

        // 根据查询条件，查询总条数
        int totalCount = billService.getBillCountByCondition(queryProductName, queryProviderId, Integer.valueOf(queryIsPayment));

        // 创建分页对象，封装参数
        PageSupport<List<Bill>> pageSupport = new PageSupport<>();
        pageSupport.setPageSize(pageSize);
        pageSupport.setTotalCount(totalCount);

        // 页码特殊处理
        if(pageNo < 1 || pageSupport.getTotalPage() == 0){
            pageNo = 1;
        } else if(pageNo > pageSupport.getTotalPage()){
            pageNo = pageSupport.getTotalPage();
        }

        // 设置当前页码
        pageSupport.setCurrPageNo(pageNo);

        // 查询所有的订单详情列表，带分页
        List<Bill> billListPage = billService.getBillListByCondition(queryProductName, queryProviderId, Integer.valueOf(queryIsPayment), pageSupport.getCurrPageNo(), pageSupport.getPageSize());

        // 添加分页数据
        pageSupport.setData(billListPage);

        // 用户列表
        map.put("pageSupport", pageSupport);

        // 查询条件回显
        map.put("queryProductName", queryProductName);
        map.put("queryProviderId", queryProviderId);
        map.put("queryIsPayment", queryIsPayment);

        // 内部转发到用户列表页面
        return "billlist";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/16
     * @param  : [request, response]
     * @return : void
     * @description : 删除订单详情
     */
    @RequestMapping("/billDel")
    public String billDel(@RequestParam("id") Integer billId) {

        // 调用业务接口，根据订单编号，删除订单详情
        billService.delBillById(Integer.valueOf(billId));

        // 重定向到供应商列表页面
        return "redirect:/bills?method=billList";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 查看订单详情
     */
    @RequestMapping("/toViewBill")
    public String toViewBill(@RequestParam("id") Integer billId, Map<String, Object> map) {

        // 调用业务接口，根据订单编号，查询订单详情
        Bill bill = billService.getBillById(Integer.valueOf(billId));

        // 订单详情对象
        map.put("bill", bill);

        // 转发到到订单详情页面
        return "billview";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 跳转修改订单详情页面
     */
    @RequestMapping("/toModBill")
    public String toModBill(@RequestParam("id") Integer billId, Map<String, Object> map) {

        // 调用业务接口，根据订单编号，查询订单详情
        Bill bill = billService.getBillById(Integer.valueOf(billId));

        // 将订单详情对象
        map.put("bill", bill);

        // 查询所有的供应商列表
        List<Provider> providers = providerService.getAllProvider();

        // 将供应商列表存入request作用域
        map.put("providers", providers);

        // 转发到到订单详情页面
        return "billmodify";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 修改订单详情
     */
    @RequestMapping("/billMod")
    public String billMod(Bill billForm) {

        // 调用业务接口，修改订单详情
        billService.modBillById(billForm);

        // 重定向到供应商列表页面
        return "redirect:/billList";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 跳转添加订单详情页面
     */
    @RequestMapping("/toAddBill")
    public String toAddBill( Map<String, Object> map) {

        // 查询所有的供应商列表
        List<Provider> providers = providerService.getAllProvider();

        // 将供应商列表存入request作用域
        map.put("providers", providers);

        // 转发到到订单详情页面
        return "billadd";
    }

    /**
     * @author : zhukang
     * @date   : 2022/8/12
     * @param  : [request, response]
     * @return : void
     * @description : 增加订单详情
     */
    @RequestMapping("/billAdd")
    public String billAdd(Bill billForm) {

        // 调用业务接口，添加供应商详情
        billService.addBillInfo(billForm);

        // 重定向到供应商列表页面
        return "redirect:/billList";
    }
}
